package com.shijichaoxing.utils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;

/**
 * Created by zj on 2018/3/31.
 */
public class CsvUtil {
    /*
    返回列号从零开始，否则要加减转换至少2次
     */
    public int getColNoByName(String colName, String[] strings) {
        int colNo = -1; //因为jQuery已经正则表达式验证过了都是合格列名，所以如果找不到就是已经被删除了
        for (int i = 0; i < strings.length; i++) {
            if (strings[i].equals(colName))
                colNo = i;
        }
        return colNo;
    }

    public String modifyLine(String tempLine, int colNo, String newValue, boolean flag) {
        String[] strings = tempLine.split(",");
        strings[colNo] = newValue;

        //把修改好的数组拼接成新行
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < strings.length; i++) {
            sb.append(strings[i]);
            if (i == strings.length - 1)
                break;
            if (flag || !flag && (i != colNo)) {//如果是删除单元格则保留单元格左右的逗号，如果是删除整列就不要后面的逗号
                //若删除最后一列，则前一列后不追加逗号，该判断语条件是逆否命题得来
                if (colNo != strings.length - 1 || i != strings.length - 2)
                    sb.append(",");
            }
        }
        return sb.toString();
    }

    public String copyLine(BufferedReader br, BufferedWriter bw, int rowNo) throws IOException {
        String tempLine = "";
        //标题行已经在原方法中读出，所以这里要注意循环次数
        for (int i = 1; i < rowNo; i++) {
            tempLine = br.readLine();
            if (tempLine == null)
                return "notExistsTheRow";
            bw.newLine();
            bw.write(tempLine);//改方法写入null会报空指针异常，所以上面判断如果读到null就返回
        }
        //这里不能用close()，因为原方法里还要使用，也不用flush()，因为原方法调用完此方法后还要继续验证，
        // 如果不合格，则这里写入生成没用的文件没法删除
        //bw.flush();
        return "success";
    }
}
